##############################################################################################

# The surge in women’s representation in the 2019 Swiss federal elections
# Swiss Political Science Review

##############################################################################################

library(dplyr)
library(ggplot2)
library(ggalt) # for geom_dumbbell
library(forcats) # for fct_reorder
library(texreg)
library(utils)

setwd("/Users/fgilardi/Dropbox/Frauenwahl 2019 paper/final submission SPSR/Replication Materials/")

nrw_2015 <- read.csv("./data/NRW2015-kandidierende.csv", sep = ";")
nrw_2019 <- read.csv("./data/NRW2019-kandidierende.csv", sep = ";")

# Data prep

party_7 <- c("GPS", "SP", "GLP", "CVP", "FDP", "BDP", "SVP")

nrw_2015 <- nrw_2015 %>%
	mutate(alter = 2015 - geburtsjahr) %>%
	mutate(kandidat_status = case_when(kandidat_status_de == "bisherig" ~ "bisherig", kandidat_status_de == "ehemalig" ~ "ehemalig", kandidat_status_de == "" ~ "neu")) %>%
	mutate(frau = case_when(geschlecht == "F" ~ 1, geschlecht == "M" ~ 0)) %>%
	mutate(partei = partei_bezeichnung_de) %>%
	mutate(partei = case_when(!(partei %in% party_7) ~ "Übrige", TRUE ~ partei))

nrw_2019 <- nrw_2019 %>%
	mutate(alter = 2019 - geburtsjahr) %>%
	mutate(kandidat_status = case_when(kandidat_status_de == "bisherig" ~ "bisherig", kandidat_status_de == "ehemalig" ~ "ehemalig", kandidat_status_de == "" ~ "neu")) %>%
	mutate(frau = case_when(geschlecht == "F" ~ 1, geschlecht == "M" ~ 0)) %>%
	mutate(partei = partei_bezeichnung_de) %>%
	mutate(partei = case_when(!(partei %in% party_7) ~ "Übrige", TRUE ~ partei))

frauen_2015 <- nrw_2015 %>%
	select(frau, partei_bezeichnung_de) %>%
	group_by(partei_bezeichnung_de) %>%
	summarize(anteil_frauen = 100*mean(frau, na.rm = TRUE), n = n()) %>%
	mutate(jahr = 2015)

parteien_2015 <- unique(nrw_2015$partei_bezeichnung_de)

frauen_2019 <- nrw_2019 %>%
	select(frau, partei_bezeichnung_de) %>%
	filter(partei_bezeichnung_de %in% parteien_2015) %>%
	group_by(partei_bezeichnung_de) %>%
	summarize(anteil_frauen = 100*mean(frau, na.rm = TRUE), n = n()) %>%
	mutate(jahr = 2019)

frauen_2015_2019 <- left_join(frauen_2015, frauen_2019, by = "partei_bezeichnung_de", name = "2015") %>%
	select(partei_bezeichnung_de, anteil_frauen.x, anteil_frauen.y) %>%
	rename(anteil_frauen_2015 = anteil_frauen.x, anteil_frauen_2019 = anteil_frauen.y) %>%
	mutate(anteil_frauen_diff = anteil_frauen_2019 - anteil_frauen_2015)

# Position on party lists

## All parties

table_listenplatz <- data.frame(party = rep(party_7, 2), year = c(rep(2015, 7), rep(2019, 7)), coef = NA, se = NA)

out_2015_listenplatz <- lm(kandidat_nummer ~ frau + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2015)
summary(out_2015_listenplatz)

out_2019_listenplatz <- lm(kandidat_nummer ~ frau + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2019)
summary(out_2019_listenplatz)


out_2015_listenplatz_logit <- glm(I(kandidat_nummer <= 3) ~ frau + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2015, family = "binomial")
summary(out_2015_listenplatz_logit)

out_2019_listenplatz_logit <- glm(I(kandidat_nummer <= 3) ~ frau + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2019, family = "binomial")
summary(out_2019_listenplatz_logit)


## By party

### 2015

for (i in 1:length(party_7)){
	p <- party_7[i]
	out <- lm(kandidat_nummer ~ frau + kandidat_status + alter + I(alter^2) + kanton_bezeichnung, data = subset(nrw_2015, partei == p))
	table_listenplatz[i,3:4] <- summary(out)$coefficients[2,1:2]
}

### 2019

for (i in 1:length(party_7)){
	p <- party_7[i]
	out <- lm(kandidat_nummer ~ frau + kandidat_status + alter + I(alter^2) + kanton_bezeichnung, data = subset(nrw_2019, partei == p))
	table_listenplatz[i+7,3:4] <- summary(out)$coefficients[2,1:2]
}

table_listenplatz <- table_listenplatz %>%
	mutate(cii = coef - 1.96*se, cis = coef + 1.96*se)

table_listenplatz

# Election

table_gewaehlt <- data.frame(party = rep(party_7, 2), year = c(rep(2015, 7), rep(2019, 7)), coef = NA, se = NA)

## All parties

out_2015_gewaehlt <- lm(flag_gewaehlt ~ frau + kandidat_nummer + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2015)
summary(out_2015_gewaehlt)

out_2015_gewaehlt_logit <- glm(flag_gewaehlt ~ frau + kandidat_nummer + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2015, family = "binomial")
summary(out_2015_gewaehlt_logit)

out_2019_gewaehlt <- lm(flag_gewaehlt ~ frau + kandidat_nummer + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2019)
summary(out_2019_gewaehlt)

out_2019_gewaehlt_logit <- glm(flag_gewaehlt ~ frau + kandidat_nummer + kandidat_status + alter + I(alter^2) + partei_bezeichnung_de + kanton_bezeichnung, data = nrw_2019, family = "binomial")
summary(out_2019_gewaehlt_logit)


## By party

### 2015

for (i in 1:length(party_7)){
	p <- party_7[i]
	out <- lm(flag_gewaehlt ~ frau + kandidat_nummer + kandidat_status + alter + I(alter^2) + kanton_bezeichnung, data = subset(nrw_2015, partei == p))
	table_gewaehlt[i,3:4] <- summary(out)$coefficients[2,1:2]
}

### 2019

for (i in 1:length(party_7)){
	p <- party_7[i]
	out <- lm(flag_gewaehlt ~ frau + kandidat_nummer + kandidat_status + alter + I(alter^2) + kanton_bezeichnung, data = subset(nrw_2019, partei == p))
	table_gewaehlt[i+7,3:4] <- summary(out)$coefficients[2,1:2]
}

table_gewaehlt <- table_gewaehlt %>%
	mutate(cii = coef - 1.96*se, cis = coef + 1.96*se)
table_gewaehlt


# Output

## Regression tables (OLS)

htmlreg(list(out_2015_listenplatz, out_2019_listenplatz, out_2015_gewaehlt, out_2019_gewaehlt),
	file = "./output/Table-1.html",
	custom.model.names = c("Listenplatz (2015)", "Listenplatz (2019)", "Gewählt (2015)", "Gewählt (2019)")#,
	# omit.coef = "(partei_)|(kanton_)"
)

texreg(list(out_2015_listenplatz, out_2019_listenplatz, out_2015_gewaehlt, out_2019_gewaehlt),
	file = "./output/Table-1.tex",
	custom.model.names = c("Listenplatz (2015)", "Listenplatz (2019)", "Gewählt (2015)", "Gewählt (2019)"),
	omit.coef = "(partei_)|(kanton_)"
)

## Regression tables (Logit)

htmlreg(list(out_2015_listenplatz_logit, out_2019_listenplatz_logit, out_2015_gewaehlt_logit, out_2019_gewaehlt_logit),
 	file = "./output/Table-A2.html",
 	custom.model.names = c( "Top 2 position (2015)", "Top 2 position (2019)", "Elected (2015)", "Elected (2019)"),
 	omit.coef = "(partei_)|(kanton_)"
)

texreg(list(out_2015_listenplatz_logit, out_2019_listenplatz_logit, out_2015_gewaehlt_logit, out_2019_gewaehlt_logit),
 	file = "./output/Table-A2.tex",
 	custom.model.names = c( "Top 2 position (2015)", "Top 2 position (2019)", "Elected (2015)", "Elected (2019)"),
 	omit.coef = "(partei_)|(kanton_)"
)


## Figures

myblue <- "#48a3ff"
myred <- "#FF4D4D"

### Figure 1

g <- ggplot(data = frauen_2015_2019) +
	aes(y = fct_reorder(partei_bezeichnung_de, anteil_frauen_2019), x = anteil_frauen_2015, xend = anteil_frauen_2019) +
	geom_vline(xintercept = 50, linetype = 2) +
	geom_dumbbell(size = 1.5, size_x = 2, size_xend = 2, colour = "gray", colour_x = myblue, colour_xend = myred) +
	geom_text(x = 28, y = "Übrige", label = "2015", color = myblue, hjust = 1.5) +
	geom_text(x = 40, y = "Übrige", label = "2019", color = myred, hjust = -0.5) +
	labs(x = "Percent women", y = "") +
	theme_light()
ggsave(g, file = "./output/Figure-1.pdf", width = 6, height = 4)

### Figure A2

g <- ggplot(data = table_listenplatz) +
	aes(y = fct_reorder(party, -coef), xmin = cii, xmax = cis, x = coef, color = as.factor(year), shape = as.factor(year)) +
	geom_vline(xintercept = 0, linetype = 2) +
	geom_pointrange(position = position_dodge(width = 0.4)) +
	geom_text(x = -4.6575760, y = "BDP", label = "2015", color = myblue, vjust = -0.5) +
	geom_text(x = -2.1784248, y = "BDP", label = "2019", color = myred, vjust = -1.5) +
	scale_colour_manual(values = c(myblue, myred)) +
	labs(x = "(women have better position)                     ", y = "") +
	theme_light() +
	theme(legend.position = "none")
ggsave(g, file = "./output/Figure-A2.pdf", width = 6, height = 4)

### Figure A3

g <- ggplot(data = table_gewaehlt) +
	aes(y = fct_reorder(party, -coef), xmin = cii, xmax = cis, x = coef, color = as.factor(year), shape = as.factor(year)) +
	geom_vline(xintercept = 0, linetype = 2) +
	geom_pointrange(position = position_dodge(width = 0.4)) +
	geom_text(x = 2.205213e-02, y = "SP", label = "2015", color = myblue, vjust = 2.5) +
	geom_text(x = 3.088367e-02, y = "SP", label = "2019", color = myred, vjust = -1.5) +
	scale_colour_manual(values = c(myblue, myred)) +
	labs(x = "   (men more likely to be elected)                 (women more likely to be elected)", y = "") +
	theme_light() +
	theme(legend.position = "none")
ggsave(g, file = "./output/Figure-A3.pdf", width = 6, height = 4)


